package com.base.tree;

public class TreeEvent {
	/**
	 * 事件转发器
	 */
	public static final String EVENT_DISPATCHER = "dispatch";
	
	private TreeEventType type = TreeEventType.click;// 事件类型

	private String handler = "";// 事件处理器:javascript事件句柄

	private String[] externalArgs = null;// 事件处理器所需的外部参数
	
	private String id = TreeUtil.requestId();// 事件标示
	
	/**
	 * 构造函数
	 * <p>
	 * 默认事件类型为单击事件 {@link TreeEventType#click}
	 * </p>
	 * @param handler 事件处理器:javascript事件句柄
	 */
	public TreeEvent(String handler){
		this.handler = handler;
	}
	
	/**
	 * 构造函数
	 * @param handler 事件处理器:javascript事件句柄
	 * @param type 事件类型
	 */
	public TreeEvent(String handler, TreeEventType type) {
		this.type = type;
		this.handler = handler;
	}
	
	/**
	 * 构造函数
	 * @param handler 事件处理器
	 * @param type 事件类型
	 * @param externalArgs 事件处理器所需的外部参数
	 */
	public TreeEvent(String handler, TreeEventType type, String[] externalArgs) {
		this.type = type;
		this.handler = handler;
		this.externalArgs = externalArgs;
	}
	
	
	/**
	 * 获取外部参数
	 * @return 外部参数
	 */
	public String[] getExternalArgs() {
		return externalArgs;
	}

	/**
	 * 设置外部参数
	 * <p>
	 * 外部参数是相对图表内部参数而言。在某些Javascript事件函数中可能有参数，这些参数为外部参数。
	 * 如图表点击事件函数clickChart(arg1,arg2)，arg1和arg2均是外部参数。对应组件而言这些参数没有什么作用，会按原值返回
	 * </p>
	 * @param externalArgs 扩展参数
	 */
	public void setExternalArgs(String[] externalArgs) {
		this.externalArgs = externalArgs;
	}

	/**
	 * 获取事件句柄
	 * @return 事件句柄
	 */
	public String getHandler() {
		return handler;
	}

	/**
	 * 设置事件句柄
	 * @param handler 事件句柄（前台Javascript函数）
	 */
	public void setHandler(String handler) {
		this.handler = handler;
	}

	/**
	 * 获取事件类型
	 * @return 事件类型
	 */
	public TreeEventType getType() {
		return type;
	}

	/**
	 * 设置事件类型
	 * @param type 事件类型
	 */
	public void setType(TreeEventType type) {
		this.type = type;
	}

	@Override
	public boolean equals(Object obj) {
		boolean flag = false;
		if(obj == null) return flag;
		
		TreeEvent event = (TreeEvent) obj;
		flag = event.getId().equals(this.getId());
		return flag;
	}

	/**
	 * 获取事件标示
	 * @return 事件标示
	 */
	public String getId() {
		return id;
	}
	
	/**
	 * 设置事件标示
	 * @param id 事件标示
	 */
	public void setId(String id) {
		this.id = id;
	}
}
